home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 4 / CU Amiga Magazine's Super CD-ROM 04 (1996)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1996-11].iso / magazine / psion / apps2 / s3stopw.lzx / stopw.opl next >
Text File  |  2015-02-13  |  5KB  |  285 lines

  1. REM Battery-friendly Stopwatch Utility
  2. REM for Series 3.
  3. REM Rick Andrews April 92.
  4.  
  5.  
  6. PROC StopW:
  7.     GLOBAL gStart& REM Time of event start.
  8.     GLOBAL gPrevS& REM Secs elapsed in prev run.
  9.     GLOBAL gInit& REM Time of event restart.
  10.  
  11.     GLOBAL gElapS& REM Total elapsed seconds.
  12.     GLOBAL gDesc$(30)
  13.     GLOBAL gTimeId%,gDescId%
  14.  
  15.     LOCAL file$(128)
  16.     LOCAL k%,done%
  17.     LOCAL save% REM Store event?
  18.  
  19.     LOCAL mode% REM 0-stop, 1-run.
  20.     LOCAL mode$(5) 
  21.  
  22. REM Init the variables.
  23.     gDesc$="(no desc)"
  24.     mode%=1
  25.     done%=0 :save%=1
  26.     mode$="Stop"
  27.  
  28.     CLS
  29.     gBORDER $202
  30.     gAT 170,3
  31.     gCLOCK ON,$25
  32.  
  33.     gAT 178,73
  34.     gPRINT "Stopwatch"
  35.     gDescId%=gCREATE(3,6,165,25,1)
  36.     gBORDER $201
  37.     gAT 5,11 :gPRINT "Event:"
  38.     gAT 5,20 :gPRINT "Started at"
  39.  
  40.     gTimeId%=gCREATE(20,33,135,40,1)
  41.     gBORDER $201
  42.  
  43.     gAT 6,15 :gPRINT "Elapsed :"
  44.     gAT 6,31 :gPRINT "Lap time:"
  45.  
  46.     gSTYLE 8 REM Double height.
  47.  
  48.     File$="m:stopwdat"
  49.     GetDets:(File$)
  50.  
  51.     gUSE gDescId%
  52.     gAT 38,11 :gPRINTB gDesc$,120
  53.     gAT 62,20 :gPRINT STime$:(gStart&)
  54.     gUSE gTimeId%
  55.  
  56. REM Main loop.
  57.     DO
  58.         IF mode% REM Clock running?
  59.             gElapS&=(Now&:-gInit&)+gPrevS&
  60.             gAT 55,18 :gPRINTB ETime$:(gElapS&),75
  61.  
  62.             PAUSE -18 REM Save battery.
  63.             k%=KEY
  64.         ELSE
  65.             k%=GET
  66.         ENDIF
  67.  
  68. REM Menu or hot-key hit?
  69.         IF k%=$122 OR (k% AND $200)
  70.             IF k%=$122
  71.                 mINIT
  72.                 mCARD "Timer",mode$,%S,"Lap",%L
  73.                 mCARD "Reset","Zero",%Z,"Kill",%K,"Exit",%X
  74.                 mCARD "Event","Edit desc",%D
  75.                 k%=MENU
  76.             ELSE
  77.                 k%=k%-$200
  78.             ENDIF
  79.             k%=k% AND $FFDF REM Uppercase.
  80.  
  81. REM Lap.
  82.             IF k%=%L
  83.                 IF mode%
  84.                     gAT 55,34
  85.                     gPRINTB ETime$:(gElapS&),75
  86.                 ENDIF
  87.  
  88. REM Stop/Start.
  89.             ELSEIF k%=%S
  90.                 IF mode%=0 REM Stopped.
  91.                     Restart:
  92.                     mode%=1
  93.                     mode$="Stop"
  94.                 ELSE REM Running.
  95.                     Stop:
  96.                     mode%=0
  97.                     mode$="Start"
  98.                 ENDIF
  99.  
  100. REM Zero.
  101.             ELSEIF k%=%Z
  102.                 IF mode%=0
  103.                     Zero:
  104.                 ENDIF
  105.  
  106. REM Kill.
  107.             ELSEIF k%=%K
  108.                 IF mode%=0
  109.                     dINIT
  110.                     dTEXT "","Delete Event and Exit",$202
  111.                     dBUTTONS "No",%N,"Yes",%Y
  112.                     IF DIALOG=%y
  113.                         save%=0
  114.                         done%=1
  115.                     ENDIF
  116.                 ENDIF
  117.  
  118. REM Edit description.
  119.             ELSEIF k%=%D
  120.                 EditDesc:
  121.  
  122. REM Exit.
  123.             ELSEIF k%=%X
  124.                 done%=1
  125.             ENDIF
  126.         ENDIF
  127.     UNTIL done%
  128.  
  129.     TRAP DELETE file$
  130.  
  131. REM Save details?
  132.     IF save%
  133.         Save:(file$)
  134.     ENDIF
  135.  
  136.     gCLOSE gTimeId%
  137.     gCLOSE gDescId%
  138.     gCLOCK OFF
  139. ENDP
  140.  
  141.  
  142. PROC Restart:
  143. REM Restart the timer.
  144.     gInit&=Now&:
  145.     IF gStart&=0 REM After being zeroed?
  146.         gStart&=gInit&
  147.         gUSE gDescId%
  148.         gAT 62,20 :gPRINTB STime$:(gStart&),95
  149.         gUSE gTimeId%
  150.     ENDIF
  151.     gSTYLE 0
  152.     gAT 6,15 :gPRINTB "Elapsed",40
  153.     gSTYLE 8
  154.     GIPRINT "Started",1
  155. ENDP
  156.  
  157.  
  158. PROC Now&:
  159. REM Returns current time in seconds.
  160.     LOCAL a&,b&
  161. REM Have to do at least two readings
  162. REM in case the results clock over
  163. REM whilst being read. 
  164.     a&=DATETOSECS(YEAR,MONTH,DAY,HOUR,MINUTE,SECOND)
  165.     DO
  166.         b&=DATETOSECS(YEAR,MONTH,DAY,HOUR,MINUTE,SECOND)
  167.     UNTIL (ABS(b&-a&)<2)
  168.     RETURN b&
  169. ENDP
  170.  
  171.  
  172. PROC Stop:
  173. REM Stop the timer.
  174.     gSTYLE 0
  175.     gAT 6,15 :gPRINTB "Stopped",40
  176.     gSTYLE 8 
  177.     gPrevS&=gElapS&
  178.     GIPRINT "Stopped",1
  179. ENDP
  180.  
  181.  
  182. PROC Zero:
  183. REM Zero the timer.
  184.     gElapS&=0 :gPrevS&=0 :gStart&=0
  185.     gSTYLE 0
  186.     gAT 6,15 :gPRINTB "Zeroed",40
  187.     gSTYLE 8
  188.     gAT 55,18 :gPRINTB ETime$:(gElapS&),75
  189.     gAT 55,34 :gPRINTB " ",75
  190.     GIPRINT "Zeroed",1
  191. ENDP
  192.  
  193.  
  194. PROC STime$:(t&)
  195. REM Return formatted start time with date.
  196.     LOCAL date$(17)
  197.     LOCAL h%,mi%,s%,d%,mo%,y%,unused%
  198.     SECSTODATE t&,y%,mo%,d%,h%,mi%,s%,unused%
  199.     date$=Hms$:(h%,mi%,s%)+" "
  200.     date$=date$+RIGHT$("0"+GEN$(d%,2),2)+"/"
  201.     date$=date$+RIGHT$("0"+GEN$(mo%,2),2)+"/"
  202.     date$=date$+RIGHT$("0"+GEN$(y%-1900,2),2)
  203.     RETURN date$
  204. ENDP
  205.  
  206.  
  207. PROC ETime$:(t&)
  208. REM Return formatted elapsed time.
  209.     LOCAL time$(13)
  210.     LOCAL elap&
  211.     LOCAL eday%,ehour%,emin%,esec%
  212.  
  213.     elap&=t&
  214.     eday%=elap&/86400
  215.     elap&=elap&-(eday%*86400.)
  216.     ehour%=elap&/3600
  217.     elap&=elap&-(ehour%*3600.)
  218.     emin%=elap&/60
  219.     elap&=elap&-(emin%*60.)
  220.     esec%=elap&
  221.  
  222.     time$=Hms$:(ehour%,emin%,esec%)+" "
  223.     IF eday%>0
  224.         time$=time$+GEN$(eday%,3)+"d"
  225.     ENDIF
  226.     RETURN time$
  227. ENDP
  228.  
  229.  
  230. PROC Hms$:(h%,m%,s%)
  231. REM Return formatted hours,mins,seconds.
  232.     LOCAL t$(8)
  233.     t$=RIGHT$("0"+GEN$(h%,2),2)+":"
  234.     t$=t$+RIGHT$("0"+GEN$(m%,2),2)+":"
  235.     t$=t$+RIGHT$("0"+GEN$(s%,2),2)
  236.     RETURN t$
  237. ENDP
  238.  
  239.  
  240. PROC GetDets:(f$)
  241. REM Load timer details if they exist.
  242.     IF EXIST(f$)
  243.         GIPRINT "Loading details",1
  244.         OPEN f$,A,time&,desc$
  245.         gStart&=A.time&
  246.         gInit&=Now&:
  247.         gPrevS&=gInit&-gStart&
  248.         gDesc$=A.desc$
  249.         CLOSE
  250.     ELSE
  251.         gPrevS&=0
  252.         dINIT "Stopwatch"
  253.         dTEXT "","Press Enter",2
  254.         dTEXT "","to start",2 REM Centre.
  255.         DIALOG
  256.         gInit&=Now&:
  257.         gStart&=gInit&
  258.         GIPRINT "Clock started",1
  259.         EditDesc:
  260.     ENDIF
  261.  
  262. ENDP
  263.  
  264.  
  265. PROC Save:(f$)
  266. REM Save the timer details.
  267.     CREATE f$,A,time&,desc$
  268.     A.time&=gStart&
  269.     A.desc$=gDesc$
  270.     APPEND
  271.     CLOSE
  272.     GIPRINT "Saved",1
  273. ENDP
  274.  
  275.  
  276. PROC EditDesc:
  277. REM Edit the description.
  278.     dINIT "Description"
  279.     dEDIT gDesc$,"Event",20
  280.     DIALOG
  281.     gUSE gDescId%
  282.     gAT 38,11 :gPRINTB gDesc$,120
  283.     gUSE gTimeId%
  284. ENDP
  285.